/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Menu;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author kelyane
 */
public abstract class Menu {
    protected Map<Integer, MenuAcao> acoes = new HashMap<>();
    
    public Menu(){ /* escrever aqui caso seja unico menu para todos os usuarios OU especificar em classes para cada perfil de usuario*/ }
    
    public abstract void  popularMenu();
    
    public static Menu criar(int quemSou){
        //Dependendo de quem sou. Carrega o menu conforme o perfil.
        
        //////////////Funciona normalmente, apesar do meu Netbeans apresentar como um 'erro'
        switch(quemSou){
            case 1 : return new MenuSecretaria(); break;
            case 2 : return new MenuMedico(); break;           
        }
        
        return null;
    }
    
    public abstract String getQuemSou();
    
    
    public void loop() throws IOException{
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        
        int opcao = 1;
        
        popularMenu();
                
        do{
            
            exibirOpcoes();
            
            System.out.printf("Digite uma opcao: ");
            opcao = Integer.valueOf(br.readLine());
           
            if(acoes.containsKey(opcao)){
                acoes.get(opcao).executar();                
            }else if(opcao != 0){
                System.out.printf("Opção não encontrada\n!");
            }
        }while(opcao != 0);
    }
    
    public void exibirOpcoes(){ 
        //Monta a visao de um menu
        System.out.printf("-------------------------------\n");
        System.out.printf("|       MENU (%s)             |\n",getQuemSou());
        System.out.printf("-------------------------------\n");
        for(Map.Entry<Integer,MenuAcao> entry : acoes.entrySet()){
            System.out.printf("| %d - %s    |\n",entry.getKey(), entry.getValue().getNome());
        }
        System.out.printf("| 0 - Sair                    |\n");
        System.out.printf("-------------------------------\n");
    }
}
